home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / man / cmds.fmt / pmake.man < prev    next >
Text File  |  1991-10-06  |  72KB  |  1,653 lines

  1.  
  2.  
  3.  
  4. PMAKE                     User Commands                     PMAKE
  5.  
  6.  
  7.  
  8. _________________________________________________________________
  9.  
  10. NNAAMMEE
  11.      pmake - create programs in parallel
  12.  
  13. SSYYNNOOPPSSIISS
  14.      ppmmaakkee [--bb] [--dd _w_h_a_t] [--ff _m_a_k_e_f_i_l_e] [--hh] [--ii] [--kk] [--ll]  [--nn]
  15.           [--pp  #]  [--qq]  [--rr]  [--ss]  [--tt] [--vv] [--xx] [--BB] [--CC] [--DD
  16.           _v_a_r_i_a_b_l_e] [--II _d_i_r_e_c_t_o_r_y] [--JJ #] [--LL #] [--MM]  [--PP]  [--RR]
  17.           [--VV]  [--WW]  [--XX] [_V_A_R_1==_v_a_l_u_e_1] [_V_A_R_2==_v_a_l_u_e_2......] [_t_a_r_g_1]
  18.           [_t_a_r_g_2 ...]
  19.  
  20. _________________________________________________________________
  21.  
  22.      -b                         ``Background'' -- run all  remote
  23.                                 processes  at  low priority.  See
  24.                                 also the .BACKGROUND attribute.
  25.  
  26.      -d   _w_h_a_t                  Specify what modules should print
  27.                                 debugging information.  _w_h_a_t is a
  28.                                 string of letters from  the  fol-
  29.                                 lowing set: aa (archives), cc (con-
  30.                                 ditionals), dd (directory  search-
  31.                                 ing),   jj  (jobs),  mm  (make),  pp
  32.                                 (parsing), rr  (remote),  ss  (suf-
  33.                                 fixes),  tt  (targets),  vv  (vari-
  34.                                 ables).  Use --dd jjrr  to  find  out
  35.                                 what host each job is run on.
  36.  
  37.      -f   _m_a_k_e_f_i_l_e              Specify a different  makefile  to
  38.                                 read     than     the    standard
  39.                                 ``Makefile'' or ``makefile''.  If
  40.                                 _m_a_k_e_f_i_l_e is "-", reads from stan-
  41.                                 dard input.
  42.  
  43.      -h                         Prints out help information.
  44.  
  45.      -i                         ``Ignore errors'' -- ignore  non-
  46.                                 zero exit statuses of commands.
  47.  
  48.      -k                         ``Keepgoing'' -- if an  error  is
  49.                                 encountered,   keep   working  on
  50.                                 those parts of  the  input  graph
  51.                                 that  are  not  affected  by  the
  52.                                 error.
  53.  
  54.      -l                         PMake has the ability to  lock  a
  55.                                 directory  against  other  people
  56.                                 executing it in the  same  direc-
  57.                                 tory  (by  means of a file called
  58.                                 ``LOCK.make'' that it creates and
  59.                                 checks  for  in  the  directory).
  60.                                 This is a Good Thing because  two
  61.                                 people  doing  the  same thing in
  62.  
  63.  
  64.  
  65. Sprite v.1.0             4 February 1991                        1
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. PMAKE                     User Commands                     PMAKE
  73.  
  74.  
  75.  
  76.                                 the same place can be  disastrous
  77.                                 for  the  final product (too many
  78.                                 cooks  and  all  that).   Whether
  79.                                 this locking is the default is up
  80.                                 to your system administrator.  If
  81.                                 locking  is  on,  --ll will turn it
  82.                                 off, and vice  versa.  Note  that
  83.                                 this locking will not prevent _y_o_u
  84.                                 from invoking PMake twice in  the
  85.                                 same place -- if you own the lock
  86.                                 file, PMake will warn  you  about
  87.                                 it but continue to execute.
  88.  
  89.      -n                         ``No execute'' -- do not  execute
  90.                                 commands.   Just  print  the ones
  91.                                 that would be executed.
  92.  
  93.      -p   #                     Tell _P_M_a_k_e if and when  to  print
  94.                                 the  input  graph.  The number is
  95.                                 the bitwise OR of the  numbers  1
  96.                                 and 2 with 1 meaning to print the
  97.                                 graph before making anything  and
  98.                                 2  meaning  to  print  the  graph
  99.                                 after making everything.   If  no
  100.                                 number  is  given, it defaults to
  101.                                 3.
  102.  
  103.      -q                         ``Query'' -- do not  execute  any
  104.                                 commands.   Just  exit  0  if the
  105.                                 given target(s) is  (are)  up  to
  106.                                 date and exit non-zero otherwise.
  107.  
  108.      -r                         ``Remove built-in rules''  --  do
  109.                                 not   parse  the  built-in  rules
  110.                                 given in the system makefile.
  111.  
  112.      -s                         ``Silence'' -- do not  echo  com-
  113.                                 mands as they are executed.
  114.  
  115.      -t                         ``Touch targets'' -- rather  than
  116.                                 executing  the commands to create
  117.                                 a target, just change its modifi-
  118.                                 cation  time so it appears up-to-
  119.                                 date.  This is dangerous.
  120.  
  121.      -v                         ``System V'' -- invokes  compati-
  122.                                 bility   functions  suitable  for
  123.                                 acting like the System V  version
  124.                                 of Make. This implies
  125.  
  126.      -x                         ``Export judiciously -- run  com-
  127.                                 mands  locally  in  preference to
  128.  
  129.  
  130.  
  131. Sprite v.1.0             4 February 1991                        2
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138. PMAKE                     User Commands                     PMAKE
  139.  
  140.  
  141.  
  142.                                 running   them   remotely.     By
  143.                                 default,   PMake  will  only  run
  144.                                 locally if there  are  more  com-
  145.                                 mands  to execute than idle hosts
  146.                                 available;  with   this   option,
  147.                                 PMake   will   run   one  command
  148.                                 locally  and  export   additional
  149.                                 commands  to available hosts.  --BB
  150.                                 ,, and --VV and turns off  directory
  151.                                 locking.  Locking  may  be turned
  152.                                 back on again by  giving  the  --ll
  153.                                 flag after --vv ..
  154.  
  155.      -B                         ``Backwards-compatible'' --  per-
  156.                                 forms as much like Make as possi-
  157.                                 ble (including executing a single
  158.                                 shell  per  command and expanding
  159.                                 variables  as  Make  did)   while
  160.                                 still performing in parallel.
  161.  
  162.      -C                         ``Non-compatible'' --  turns  off
  163.                                 all compatibility specified up to
  164.                                 the point at which --CC is  encoun-
  165.                                 tered.
  166.  
  167.      -D   _v_a_r_i_a_b_l_e              Defines the given variable to  be
  168.                                 11 in the global context.
  169.  
  170.      -I   _d_i_r_e_c_t_o_r_y             Specify  another   directory   in
  171.                                 which   to  look  for  #include'd
  172.                                 makefiles.   This  flag  may   be
  173.                                 repeated  as many times as neces-
  174.                                 sary.
  175.  
  176.      -J   #                     Specify  the  maximum  number  of
  177.                                 jobs   to  run  at  once  on  all
  178.                                 machines.
  179.  
  180.      -L   #                     Specify  the  maximum  number  of
  181.                                 jobs to run locally.
  182.  
  183.      -M                         Be as much like Make as possible.
  184.                                 No  parallel execution. Old-style
  185.                                 variable expansion. One shell per
  186.                                 command. Etc.
  187.  
  188.      -P                         ``Don't use Pipes''  --  see  the
  189.                                 section on
  190.  
  191.      -R                         ``Remigrate    verbosely''     --
  192.                                 announce when processes are remi-
  193.                                 grated  subsequent  to  eviction.
  194.  
  195.  
  196.  
  197. Sprite v.1.0             4 February 1991                        3
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. PMAKE                     User Commands                     PMAKE
  205.  
  206.  
  207.  
  208.                                 OOUUTTPPUUTT.
  209.  
  210.      -V                         ``Do  old-style  variable  expan-
  211.                                 sion''   --  expands  an  unknown
  212.                                 variable to the empty string.
  213.  
  214.      -W                         Don't print warning messages.
  215.  
  216.      -X                         ``No Export'' -- prohibits expor-
  217.                                 tation.
  218.  
  219.      VAR=value                  Set the value of the variable VVAARR
  220.                                 to  the given value.  This super-
  221.                                 cedes any value assigned  to  the
  222.                                 variable  in  the  makefile.  See
  223.                                 VVAARRIIAABBLLEESS.
  224.  
  225. DDEESSCCRRIIPPTTIIOONN
  226.      _P_M_a_k_e is a program designed to make the maintenance of other
  227.      programs  much  easier.   Its  input  is a ``makefile'' that
  228.      specifies which files depend on which other files  and  what
  229.      to  do  about  files  that are ``out-of-date.'' If you don't
  230.      specify a makefile to read, MMaakkeeffiillee and mmaakkeeffiillee,  in  that
  231.      order, are looked for and read if they exist.
  232.  
  233.      This manual page is meant to be a reference page only. For a
  234.      more thorough description of _P_M_a_k_e, please refer to _P_M_a_k_e --
  235.      _A _T_u_t_o_r_i_a_l(available in this distribution).
  236.  
  237.      There are four basic types of lines in a makefile:
  238.  
  239.           1)   File dependency specifications
  240.  
  241.           2)   Creation commands
  242.  
  243.           3)   Variable assignments
  244.  
  245.           4)   Comments,  include  statements   and   conditional
  246.                directives
  247.  
  248.      Any line may be continued over multiple lines by  ending  it
  249.      with  a backslash.  The backslash, following newline and any
  250.      initial whitespace on the following line are compressed into
  251.      a single space.
  252.  
  253. DDEEPPEENNDDEENNCCYY LLIINNEESS
  254.      On a dependency line, there  are  targets,  sources  and  an
  255.      operator.   The  targets  ``depend''  on the sources and are
  256.      usually created  from  them.   Any  number  of  targets  and
  257.      sources  may be specified on a dependency line. All the tar-
  258.      gets in the line are made to depend on all the sources.   If
  259.      you  run out of room, use a backslash at the end of the line
  260.  
  261.  
  262.  
  263. Sprite v.1.0             4 February 1991                        4
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270. PMAKE                     User Commands                     PMAKE
  271.  
  272.  
  273.  
  274.      to continue onto the next one.
  275.  
  276.      Any file may be a target and any file may be a  source,  but
  277.      the  relationship between them is determined by the ``opera-
  278.      tor'' that separates them. Three operators are defined:
  279.  
  280.           :    A target on the line is considered ``out-of-date''
  281.                if  any  of  its  sources  has  been modified more
  282.                recently than the target.  Sources  for  a  target
  283.                accumulate over lines when this operator is used.
  284.  
  285.           !    Targets will always be re-created, but  this  will
  286.                not  happen  until  all  of  its sources have been
  287.                examined and re-created,  if  necessary.   Sources
  288.                accumulate over lines as for the colon.
  289.  
  290.           ::   Much like the colon, but acts like the !  operator
  291.                if  no  sources are specified. In addition sources
  292.                do not accumulate over lines. Rather, the commands
  293.                associated  with the line (see below) are executed
  294.                only if the target is out-of-date with respect  to
  295.                the  sources  on that line only.  In addition, the
  296.                target will not be  removed  if  _P_M_a_k_e  is  inter-
  297.                rupted, unlike for the other two operators.
  298.  
  299.      For example:
  300.         a    : a.o b.o c.o
  301.         b    ! d.o e.o
  302.         c    :: f.o
  303.              command1
  304.         a    : g.o
  305.         b    ! h.o
  306.         c    ::
  307.              command2
  308.      specifies that a depends on a.o, b.o, c.o and g.o  and  will
  309.      be  remade  only  if  out-of-date with respect to these four
  310.      files. b depends on d.o, e.o and  h.o  and  will  always  be
  311.      remade, but only after these three files have been remade. c
  312.      will be remade with  command1  if  it  is  out-of-date  with
  313.      respect  to  f.o,  as for the colon operator, while command2
  314.      will always be executed.
  315.  
  316.      Targets and sources may also contain standard shell wildcard
  317.      characters  (?,  *, [ and {}), but the ?, *, [ and ] charac-
  318.      ters may only be used in the final component of  the  target
  319.      or  source. If a target or source contains only curly braces
  320.      and no other wildcard characters, it need  not  describe  an
  321.      existing  file. Otherwise, only existing files will be used.
  322.      E.g. the pattern
  323.         {a,b,c}.o
  324.      will expand to
  325.         a.o b.o c.o
  326.  
  327.  
  328.  
  329. Sprite v.1.0             4 February 1991                        5
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336. PMAKE                     User Commands                     PMAKE
  337.  
  338.  
  339.  
  340.      regardless of whether these three files exist, while
  341.         [abc].o
  342.      will only expand to this  if  all  three  files  exist.  The
  343.      resulting  expansion  is  in directory order, not alphabeti-
  344.      cally sorted as in the shell.
  345.  
  346. CCOOMMMMAANNDDSS
  347.      Each target has associated with it a sort  of  shell  script
  348.      made  up  of a series of shell commands. The creation script
  349.      for a target should immediately follow the  dependency  line
  350.      for  that  target.  Each of the commands in this script _m_u_s_t
  351.      be preceded by a tab character.
  352.  
  353.      While any given target may appear on more  than  one  depen-
  354.      dency  line,  only one of these dependency lines may be fol-
  355.      lowed by a creation script,  unless  the  "::"  operator  is
  356.      used.
  357.  
  358.      One helpful feature of _P_M_a_k_e is the ability to squirrel away
  359.      commands  for  a  target to be executed when everything else
  360.      has been done. To do this, make one of the commands for  the
  361.      target  be  just  ``...'' (an ellipsis) on a line by itself.
  362.      The ellipsis itself won't be executed, of  course,  but  any
  363.      commands  in  the  target's  script that follow the ellipsis
  364.      will be saved until _P_M_a_k_e is done processing  everything  it
  365.      needs to process.  If you were to say,
  366.         a.o             : a.c
  367.                 cc -c a.c
  368.                 ...
  369.                 @echo "All done"
  370.      Then the command ``echo  "All  done"''  would  execute  once
  371.      everything  else had finished. Note that this will only hap-
  372.      pen if ``a.o'' is found to be out-of-date.
  373.  
  374.      There is another way in which makefile shell commands differ
  375.      from  regular  shell  commands,  as illustrated in the above
  376.      makefile scrap.  The first two characters after the  initial
  377.      tab  (and  any  other  whitespace) are treated specially. If
  378.      they are any combination of `@'  and  `-',  (``@'',  ``@-'',
  379.      ``-@'' or ``-''), they cause _P_M_a_k_e to do different things.
  380.  
  381.      In most cases, shell commands  are  printed  to  the  screen
  382.      before  they're  actually  executed.  This  is  to  keep you
  383.      informed of what's going on. If  an  `@'  appears,  however,
  384.      this echoing is suppressed. In the case of the echo command,
  385.      above, this makes sense. It would look silly to see
  386.         echo "All done"
  387.         All done
  388.      so _P_M_a_k_e allows you to avoid that (this sort of echo control
  389.      is  only available if you use the Bourne or C shells to exe-
  390.      cute your commands, since the commands  are  echoed  by  the
  391.      shell, not by _P_M_a_k_e).
  392.  
  393.  
  394.  
  395. Sprite v.1.0             4 February 1991                        6
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402. PMAKE                     User Commands                     PMAKE
  403.  
  404.  
  405.  
  406.      The other special character is the `-'.  Shell commands exit
  407.      with  a  certain ``exit status.''  Normally this status will
  408.      be 0 if everything went ok and non-zero  if  something  went
  409.      wrong. For this reason, _P_M_a_k_e will consider an error to have
  410.      occurred if one of the commands it invokes  returns  a  non-
  411.      zero  status.  When it detects an error, its usual action is
  412.      to stop working, wait for everything in process  to  finish,
  413.      and  exit  with a non-zero status itself.  This behavior can
  414.      be altered, however, by means of --ii or --kk arguments,  or  by
  415.      placing  a  `-' at the front of the command.  (Another quick
  416.      note: the decision of whether to abort a target when one  of
  417.      its  shell  commands  returns  non-zero is left to the shell
  418.      that is executing  the  commands.  Some  shells  allow  this
  419.      ``error-checking''  to  be switched on and off at will while
  420.      others do not.)
  421.  
  422. VVAARRIIAABBLLEESS
  423.      _P_M_a_k_e has the ability  to  save  text  in  variables  to  be
  424.      recalled  later at your convenience.  Variables in _P_M_a_k_e are
  425.      used much like variables in _s_h(1) and, by tradition, consist
  426.      of   all   upper-case   letters.   They  are  assigned-  and
  427.      appended-to using lines of the form
  428.         _V_A_R_I_A_B_L_E == _v_a_l_u_e
  429.         _V_A_R_I_A_B_L_E ++== _v_a_l_u_e
  430.      respectively, while being conditionally assigned-to (if  not
  431.      already  defined) and assigned-to with expansion by lines of
  432.      the form
  433.         _V_A_R_I_A_B_L_E ??== _v_a_l_u_e
  434.         _V_A_R_I_A_B_L_E ::== _v_a_l_u_e
  435.      Finally,
  436.         _V_A_R_I_A_B_L_E !!== _c_o_m_m_a_n_d
  437.      will execute _c_o_m_m_a_n_d using the Bourne shell  and  place  the
  438.      result  in  the  given  variable.  Newlines are converted to
  439.      spaces before the assignment is made. This is  not  intended
  440.      to be used with commands that produce a large amount of out-
  441.      put. If you use it this way, it will probably deadlock.
  442.  
  443.      Variables are expanded by enclosing  the  variable  name  in
  444.      either  parentheses  or curly braces and preceding the whole
  445.      thing with a dollar sign.  E.g. to set the  variable  CCFFLLAAGGSS
  446.      to  the string ``-I/sprite/src/lib/libc -O'' you would place
  447.      a line
  448.         CFLAGS = -I/sprite/src/lib/libc -O
  449.      in the makefile and use  the  word  $$((CCFFLLAAGGSS))  wherever  you
  450.      would  like  the  string  ``-I/sprite/src/lib/libc  -O''  to
  451.      appear.  To  pass  a  string  of  the  form  ``$(_n_a_m_e)''  or
  452.      ``${_n_a_m_e}'' through to the shell (e.g. to tell it to substi-
  453.      tute one of its variables), you  can  use  ``$$(_n_a_m_e)''  and
  454.      ``$${_n_a_m_e}'', respectively, or, as long as the _n_a_m_e is not a
  455.      _P_M_a_k_e variable, you can just place the string  in  directly,
  456.      as  _P_M_a_k_e will not expand a variable it doesn't know, unless
  457.      it is given one of the three compatibility flags --VV, --BB,  or
  458.  
  459.  
  460.  
  461. Sprite v.1.0             4 February 1991                        7
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468. PMAKE                     User Commands                     PMAKE
  469.  
  470.  
  471.  
  472.      --MM.
  473.  
  474.      There are two distinct times at which variable  substitution
  475.      occurs:  When  parsing  a dependency line, such substitution
  476.      occurs immediately upon reading the line.   Thus  all  vari-
  477.      ables  used  in dependency lines must be defined before they
  478.      appear on any dependency line.  For variables that appear in
  479.      shell  commands,  variable substitution occurs when the com-
  480.      mand is processed, i.e. when it is prepared to be passed  to
  481.      the  shell  or before being squirreled away for later execu-
  482.      tion (qv. CCOOMMMMAANNDDSS, above).
  483.  
  484.      There are four different types of variables at  which  _P_M_a_k_e
  485.      will  look  when  trying to expand any given variable.  They
  486.      are (in order of decreasing precedence): (1) variables  that
  487.      are  defined specific to a certain target. These are the so-
  488.      called ``local'' variables and will only be used  when  per-
  489.      forming  variable  substitution on the target's shell script
  490.      and in dynamic sources (see below  for  more  details),  (2)
  491.      variables  that  were defined on the command line, (3) vari-
  492.      ables defined in the  makefile  and  (4)  those  defined  in
  493.      _P_M_a_k_e's  environment,  as  passed  by  your login shell.  An
  494.      important side effect of this searching order is  that  once
  495.      you  define  a  variable on the command line, nothing in the
  496.      makefile can change it. _N_o_t_h_i_n_g.
  497.  
  498.      As mentioned above, each target has associated  with  it  as
  499.      many  as  seven ``local'' variables. Four of these variables
  500.      are always set for every target  that  must  be  re-created.
  501.      Each local variable has a long, meaningful name and a short,
  502.      one-character name that exists for  backwards-compatibility.
  503.      They are:
  504.  
  505.      @u-3p      .TARGET (@)
  506.                The name of the target.
  507.  
  508.           .OODATE (?)
  509.                The list of sources  for  this  target  that  were
  510.                deemed out-of-date.
  511.  
  512.           .ALLSRC (>)
  513.                The list of all sources for this target.
  514.  
  515.           .PREFIX (*)
  516.                The file prefix of the file.  This  contains  only
  517.                the file portion -- no suffix or leading directory
  518.                components.
  519.  
  520.      Three other ``local'' variables are  set  only  for  certain
  521.      targets   under   special   circumstances.   These  are  the
  522.      ``.IMPSRC'', ``.ARCHIVE'' and  ``.MEMBER''  variables.  When
  523.      they  are set, how they are used, and what their short forms
  524.  
  525.  
  526.  
  527. Sprite v.1.0             4 February 1991                        8
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534. PMAKE                     User Commands                     PMAKE
  535.  
  536.  
  537.  
  538.      are are detailed in later sections.
  539.  
  540.      In addition, for  you  System  V  fans,  the  six  variables
  541.      ``@F'',  ``@D'',  ``<F'',  ``<D'',  ``*F'',  and  ``*D'' are
  542.      defined to be the same as for the System V version of  Make.
  543.      If you don't know about these things, be glad.
  544.  
  545.      Four of these local variables may  be  used  in  sources  on
  546.      dependency  lines.  The variables expand to the proper value
  547.      for each target on the line. The variables are  ``.TARGET'',
  548.      ``.PREFIX'', ``.ARCHIVE'', and ``.MEMBER''.
  549.  
  550.      In addition, certain variables are set by  or  have  special
  551.      meaning  to _P_M_a_k_e.  The ..PPMMAAKKEE (and MMAAKKEE) variable is set to
  552.      the name by which _P_M_a_k_e  was  invoked,  to  allow  recursive
  553.      makes  to  use  the  same  version, whatever it may be.  All
  554.      command-line  flags  given  to  _P_M_a_k_e  are  stored  in   the
  555.      ..MMAAKKEEFFLLAAGGSS  (and  MMFFLLAAGGSS)  variable just as they were given.
  556.      This variable is also exported to  subshells  as  the  PPMMAAKKEE
  557.      environment variable.
  558.  
  559.      Variable expansion may be modified as for  the  C  shell.  A
  560.      general expansion specification looks like:
  561.         $$((_v_a_r_i_a_b_l_e[::_m_o_d_i_f_i_e_r[::...]]))
  562.      Each modifier begins with a single character, thus:
  563.  
  564.           M_p_a_t_t_e_r_n
  565.                This is used to select only those words (a word is
  566.                a series of characters that are neither spaces nor
  567.                tabs) that match the given _p_a_t_t_e_r_n .  The  pattern
  568.                is a wildcard pattern like that used by the shell,
  569.                where "*" means 0 or more characters of any  sort;
  570.                "?"  is any single character; "[abcd]" matches any
  571.                single character that is either `a', `b',  `c'  or
  572.                `d' (there may be any number of characters between
  573.                the brackets); [[00--99]] matches any single  character
  574.                that  is between `0' and `9' (i.e. any digit. This
  575.                form may be freely mixed with  the  other  bracket
  576.                form),  and \ is used to escape any of the charac-
  577.                ters "*", "?", "[" or ":", leaving them as regular
  578.                characters to match themselves in a word.
  579.  
  580.           N_p_a_t_t_e_r_n
  581.                This is identical to ":M"  except  it  substitutes
  582.                all words that don't match the given pattern.
  583.  
  584.           S/_s_e_a_r_c_h-_s_t_r_i_n_g/_r_e_p_l_a_c_e_m_e_n_t-_s_t_r_i_n_g/[g]
  585.                Causes the first occurrence  of  _s_e_a_r_c_h-_s_t_r_i_n_g  in
  586.                the  variable to be replaced by _r_e_p_l_a_c_e_m_e_n_t-_s_t_r_i_n_g
  587.                , unless the "g" flag is  given  at  the  end,  in
  588.                which  case  all  occurrences  of  the  string are
  589.                replaced. The substitution is  performed  on  each
  590.  
  591.  
  592.  
  593. Sprite v.1.0             4 February 1991                        9
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600. PMAKE                     User Commands                     PMAKE
  601.  
  602.  
  603.  
  604.                word  in  the  variable  in turn. If _s_e_a_r_c_h-_s_t_r_i_n_g
  605.                begins with a "^", the string must match  starting
  606.                at  the  beginning  of  the word. If _s_e_a_r_c_h-_s_t_r_i_n_g
  607.                ends with a "$", the string must match to the  end
  608.                of the word (these two may be combined to force an
  609.                exact match). If a backslash  precedes  these  two
  610.                characters, however, they lose their special mean-
  611.                ing. Variable expansion also occurs in the  normal
  612.                fashion  inside  both  the  _s_e_a_r_c_h-_s_t_r_i_n_g  and the
  613.                _r_e_p_l_a_c_e_m_e_n_t-_s_t_r_i_n_g , eexxcceepptt that  a  backslash  is
  614.                used  to  prevent  the  expansion  of  a  "$", not
  615.                another dollar  sign,  as  is  usual.   Note  that
  616.                _s_e_a_r_c_h-_s_t_r_i_n_g  is just a string, not a pattern, so
  617.                none  of  the  usual   regular-expression/wildcard
  618.                characters  has  any  special meaning save "^" and
  619.                "$".  In the replacement string, the "&" character
  620.                is replaced by the _s_e_a_r_c_h-_s_t_r_i_n_g unless it is pre-
  621.                ceded by a backslash.  You are allowed to use  any
  622.                character  except  colon  or  exclamation point to
  623.                separate the two strings. This so-called delimiter
  624.                character  may  be  placed  in  either  string  by
  625.                preceding it with a backslash.
  626.  
  627.           T    Replaces each word in the  variable  expansion  by
  628.                its last component (its ``tail'').
  629.  
  630.           H    This is similar to ":T", except that every word is
  631.                replaced   by   everything   but   the  tail  (the
  632.                ``head'').
  633.  
  634.           E    ":E" replaces each word by  its  suffix  (``exten-
  635.                sion'').
  636.  
  637.           R    This replaces each word by everything but the suf-
  638.                fix (the ``root'' of the word).
  639.  
  640.      In addition, PMake supports the System V form  of  substitu-
  641.      tion (_s_t_r_i_n_g_1=_s_t_r_i_n_g_2).
  642.  
  643. CCOOMMMMEENNTTSS,, IINNCCLLUUSSIIOONN AANNDD CCOONNDDIITTIIOONNAALLSS
  644.      Makefile inclusion and conditional structures reminiscent of
  645.      the C compiler have also been included in _P_M_a_k_e.
  646.  
  647.      Comments begin with a `#' anywhere but in  a  shell  command
  648.      and  continue  to  the end of the line.  If the `#' comes at
  649.      the beginning of the line, however, the  following  keywords
  650.      are recognized and acted on:
  651.  
  652.      iinncclluuddee ''''_m_a_k_e_f_i_l_e''''
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659. Sprite v.1.0             4 February 1991                       10
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666. PMAKE                     User Commands                     PMAKE
  667.  
  668.  
  669.  
  670.      iinncclluuddee <<_s_y_s_t_e_m _m_a_k_e_f_i_l_e>>
  671.  
  672.      This is very similar  to  the  C  compiler's  file-inclusion
  673.      facility,  right  down  to  the  syntax.   What  follows the
  674.      ##iinncclluuddee must be a filename enclosed either in double-quotes
  675.      or  angle  brackets.  Variables will be expanded between the
  676.      double-quotes  or  angle-brackets.   If  angle-brackets  are
  677.      used,  the  system  makefile  directory is searched.  If the
  678.      name is enclosed in double-quotes, the including  makefile's
  679.      directory,  followed  by  all directories given via --II argu-
  680.      ments, followed by the system directory, is searched  for  a
  681.      file of the given name.
  682.  
  683.      If the file is found, _P_M_a_k_e starts taking  input  from  that
  684.      file as if it were part of the original makefile.
  685.  
  686.      When the end of the file is reached, _P_M_a_k_e goes back to  the
  687.      previous  file  and  continues from where it left off.  This
  688.      facility is recursive up to a  depth  limited  only  by  the
  689.      number of open files allowed to any process at one time.
  690.  
  691.      iiff [[!!]] _e_x_p_r [[ _o_p _e_x_p_r ...... ]]
  692.  
  693.      iiffddeeff [[!!]] _v_a_r_i_a_b_l_e [[_o_p _v_a_r_i_a_b_l_e......]]
  694.  
  695.      iiffnnddeeff [[!!]] _v_a_r_i_a_b_l_e [[_o_p _v_a_r_i_a_b_l_e......]]
  696.  
  697.      iiffmmaakkee [[!!]] _t_a_r_g_e_t [[_o_p _t_a_r_g_e_t......]]
  698.  
  699.      iiffnnmmaakkee [[!!]] _t_a_r_g_e_t [[_o_p _t_a_r_g_e_t......]]
  700.  
  701.      These are all the beginnings of  conditional  constructs  in
  702.      the spirit of the C compiler.  Conditionals may be nested to
  703.      a depth of thirty.
  704.  
  705.      In the expressions given above, _o_p may be either |||| (logical
  706.      OR)  or  &&&&  (logical AND).  &&&& has a higher precedence than
  707.      ||||.  As in C, _P_M_a_k_e will evaluate an expression only as  far
  708.      as  necessary  to determine its value. I.e. if the left side
  709.      of an &&&& is false, the expression is false  and  vice  versa
  710.      for  ||||.   Parentheses  may  be  used as usual to change the
  711.      order of evaluation.
  712.  
  713.      One other boolean operator is  provided:  !!  (logical  nega-
  714.      tion).  It  is of a higher precedence than either the AND or
  715.      OR operators, and may be applied in any of the  ``if''  con-
  716.      structs,  negating  the  given  function  for ``#if'' or the
  717.      implicit function for the other four.
  718.  
  719.      _E_x_p_r can be one of several things. Four functions  are  pro-
  720.      vided, each of which takes a different sort of argument.
  721.  
  722.  
  723.  
  724.  
  725. Sprite v.1.0             4 February 1991                       11
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732. PMAKE                     User Commands                     PMAKE
  733.  
  734.  
  735.  
  736.      The function ddeeffiinneedd is used to test for the existence of  a
  737.      variable.   Its  argument  is,  therefore,  a variable name.
  738.      Certain lower-case variable names  (e.g.  ``sun'',  ``unix''
  739.      and  ``sprite'')  are  defined  in  the system makefile (qv.
  740.      FFIILLEESS) to specify the sort of system on which _P_M_a_k_e is being
  741.      run.  These  are  intended  to make makefiles more portable.
  742.      Any variable may be used as  the  argument  of  the  ddeeffiinneedd
  743.      function.
  744.  
  745.      The mmaakkee function is given the  name  of  a  target  in  the
  746.      makefile  and  evaluates  to true if the target was given on
  747.      _P_M_a_k_e's command-line or as a source  for  the  ..MMAAIINN  target
  748.      before the line containing the conditional.
  749.  
  750.      The eexxiissttss  function  takes  a  file  name,  which  file  is
  751.      searched  for on the system search path (as defined by ..PPAATTHH
  752.      targets (see below)). It  evaluates  true  if  the  file  is
  753.      found.
  754.  
  755.      eemmppttyy takes a variable expansion  specification  (minus  the
  756.      dollar  sign) as its argument. If the resulting expansion is
  757.      empty, this evaluates true.
  758.  
  759.      _E_x_p_r can also be an arithmetic or  string  comparison,  with
  760.      the lefthand side being a variable expansion. The standard C
  761.      relational operators are allowed, and the usual  number/base
  762.      conversion  is  performed,  with  the  exception  that octal
  763.      numbers are not supported. If the righthand side of  a  "=="
  764.      or "!=" operator begins with a quotation mark, a string com-
  765.      parison is done between the expanded variable and  the  text
  766.      between  the  quotation marks.  If no relational operator is
  767.      given, it is assumed that the expanded  variable  is  to  be
  768.      compared  against  0,  i.e.  it is interpreted as a boolean,
  769.      with a 0 value being false and a non-zero value being true.
  770.  
  771.      When, in the course of evaluating one of  these  conditional
  772.      expressions,  _P_M_a_k_e  encounters some word it does not recog-
  773.      nize, it applies one  of  either  _m_a_k_e  or  _d_e_f_i_n_e_d  to  it,
  774.      depending  on  the form of ``if'' used. E.g. ``#ifdef'' will
  775.      apply the _d_e_f_i_n_e_d function, while  ``#ifnmake''  will  apply
  776.      the negation of the _m_a_k_e function.
  777.  
  778.      If the expression following one  of  these  forms  evaluates
  779.      true, the reading of the makefile continues as before. If it
  780.      evaluates false, the following lines are  skipped.  In  both
  781.      cases,  this  continues  until  either an ##eellssee or an ##eennddiiff
  782.      line is encountered.
  783.  
  784.      eellssee
  785.  
  786.      The #else, as in the C compiler, causes  the  sense  of  the
  787.      last  conditional  to  be  inverted  and  the reading of the
  788.  
  789.  
  790.  
  791. Sprite v.1.0             4 February 1991                       12
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798. PMAKE                     User Commands                     PMAKE
  799.  
  800.  
  801.  
  802.      makefile to be based on this new value.  I.e. if the  previ-
  803.      ous  expression  evaluated true, the parsing of the makefile
  804.      is suspended until an #endif line is read.  If the  previous
  805.      expression  evaluated  false, the parsing of the makefile is
  806.      resumed.
  807.  
  808.      eelliiff [[!!]] _e_x_p_r [[ _o_p _e_x_p_r ...... ]]
  809.  
  810.      eelliiffddeeff [[!!]] _v_a_r_i_a_b_l_e [[_o_p _v_a_r_i_a_b_l_e......]]
  811.  
  812.      eelliiffnnddeeff [[!!]] _v_a_r_i_a_b_l_e [[_o_p _v_a_r_i_a_b_l_e......]]
  813.  
  814.      eelliiffmmaakkee [[!!]] _t_a_r_g_e_t [[_o_p _t_a_r_g_e_t......]]
  815.  
  816.      eelliiffnnmmaakkee [[!!]] _t_a_r_g_e_t [[_o_p _t_a_r_g_e_t......]]
  817.  
  818.      The ``elif'' constructs are a combination  of  ``else''  and
  819.      ``if,''  as  the  name  implies.  If  the  preceding  ``if''
  820.      evaluated false, the expression following  the  ``elif''  is
  821.      evaluated and the lines following it are read or ignored the
  822.      same as for  a  regular  ``if.''  If  the  preceding  ``if''
  823.      evaluated  true,  however,  the  ``elif'' is ignored and all
  824.      following lines until the ``endif'' (see below) are ignored.
  825.  
  826.      eennddiiff
  827.  
  828.      ##eennddiiff is used to end a conditional section. If  lines  were
  829.      being  skipped,  the reading of the makefile resumes. Other-
  830.      wise, it has no effect (the makefile continues to be  parsed
  831.      as it was just before the ##eennddiiff was encountered).
  832.  
  833.      uunnddeeff
  834.  
  835.      Takes the next word on the line as a global variable  to  be
  836.      undefined (only undefines global variables, not command-line
  837.      variables). If the variable is already undefined, no message
  838.      is generated.
  839.  
  840. TTAARRGGEETT AATTTTRRIIBBUUTTEESS
  841.      In _P_M_a_k_e,  files  can  have  certain  ``attributes.''  These
  842.      attributes cause _P_M_a_k_e to treat the targets in special ways.
  843.      An attribute is a special word given as a source to a target
  844.      on  a  dependency  line.  The  words and their functions are
  845.      given below:
  846.  
  847.      .BACKGROUND  Forces the target to be run at low priority, to
  848.                   keep  it  from preventing other higher-priority
  849.                   processes from using idle hosts.
  850.  
  851.      .DONTCARE    If a target is marked with this  attribute  and
  852.                   PMake  can't  figure  out  how to create it, it
  853.                   will ignore this fact and assume the file isn't
  854.  
  855.  
  856.  
  857. Sprite v.1.0             4 February 1991                       13
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864. PMAKE                     User Commands                     PMAKE
  865.  
  866.  
  867.  
  868.                   really needed or actually exists and PMake just
  869.                   can't find it.
  870.  
  871.      .EXEC        This causes the marked target's shell script to
  872.                   always be executed (unless the --nn or --tt flag is
  873.                   given), but appear  invisible  to  any  targets
  874.                   that depend on it.
  875.  
  876.      .EXPORT      This is used to mark those targets whose  crea-
  877.                   tion  should  be  sent to another machine if at
  878.                   all possible. This may be used by some exporta-
  879.                   tion  schemes  if the exportation is expensive.
  880.                   You should ask  your  administrator  if  it  is
  881.                   necessary.
  882.  
  883.      .EXPORTSAME  Tells the export system that the job should  be
  884.                   exported  to a machine of the same architecture
  885.                   as the current one.  Certain  operations  (e.g.
  886.                   running  text through "nroff") can be performed
  887.                   the same on any architecture (CPU and operating
  888.                   system  type),  while  others (e.g. compiling a
  889.                   program with  "cc")  must  be  performed  on  a
  890.                   machine  with  the  same  architecture. Not all
  891.                   export systems will support this attribute.
  892.  
  893.      .IGNORE      Giving a target the  ..IIGGNNOORREE  attribute  causes
  894.                   PMake to ignore errors from any of the target's
  895.                   commands, as if they all had `-' before them.
  896.  
  897.      .INVISIBLE   This allows you to  specify  one  target  as  a
  898.                   source  for  another  without the one affecting
  899.                   the other's local variables.
  900.  
  901.      .JOIN        This forces the target's  shell  script  to  be
  902.                   executed only if one or more of the sources was
  903.                   out-of-date. In addition, the target's name, in
  904.                   both  its  ..TTAARRGGEETT  variable  and all the local
  905.                   variables of any target that depends on it,  is
  906.                   replaced  by the value of its ..AALLLLSSRRCC variable.
  907.                   Another aspect of the  .JOIN  attribute  is  it
  908.                   keeps  the  target from being created if the --tt
  909.                   flag was given.
  910.  
  911.      .MAKE        The ..MMAAKKEE attribute marks its target as being a
  912.                   recursive  invocation  of  PMake.   This forces
  913.                   PMake to execute the script associated with the
  914.                   target  (if  it's out-of-date) even if you gave
  915.                   the --nn or --tt flag.
  916.  
  917.      .NOEXPORT    Forces the target to be created  locally,  even
  918.                   if you've given _P_M_a_k_e the --LL 00 flag.
  919.  
  920.  
  921.  
  922.  
  923. Sprite v.1.0             4 February 1991                       14
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930. PMAKE                     User Commands                     PMAKE
  931.  
  932.  
  933.  
  934.      .NOTMAIN     Normally, if you do not  specify  a  target  to
  935.                   make  in  any  other  way,  _P_M_a_k_e will take the
  936.                   first target on the first dependency line of  a
  937.                   makefile  as  the  target  to create.  Giving a
  938.                   target this attribute keeps it from this fate.
  939.  
  940.      .PRECIOUS    When PMake is interrupted, it will  attempt  to
  941.                   clean up after itself by removing any half-made
  942.                   targets. If a target has this  attribute,  how-
  943.                   ever, _P_M_a_k_e will leave it alone
  944.  
  945.      .SILENT      Marking a target with this attribute keeps  its
  946.                   commands  from  being printed when they're exe-
  947.                   cuted.
  948.  
  949.      .USE         By giving a target this attribute, you turn the
  950.                   target into _P_M_a_k_e's equivalent of a macro. When
  951.                   the target is used as a source for another tar-
  952.                   get,  the  other  target acquires the commands,
  953.                   sources and attributes  (except  ..UUSSEE)  of  the
  954.                   source.   If  the  target already has commands,
  955.                   the ..UUSSEE target's commands  are  added  to  the
  956.                   end.  If  more  than  one .USE-marked source is
  957.                   given  to  a  target,  the  rules  are  applied
  958.                   sequentially.
  959.  
  960. SSPPEECCIIAALL TTAARRGGEETTSS
  961.      As there were in Make, so there  are  certain  targets  that
  962.      have  special meaning to PMake. When you use one on a depen-
  963.      dency line, it is the only target that  may  appear  on  the
  964.      left-hand-side of the operator.  The targets are as follows:
  965.  
  966.      .BACKGROUND applies the .BACKGROUND attribute to each of its
  967.                  sources.  If  there are no sources on the depen-
  968.                  dency line, then it is as if you gave PMake  the
  969.                  --bb flag.
  970.  
  971.      .BEGIN      Any commands attached to this  target  are  exe-
  972.                  cuted  before anything else is done. You can use
  973.                  it for any initialization that needs doing.
  974.  
  975.      .DEFAULT    This is sort of a .USE rule for any target (that
  976.                  was used only as a source) that _P_M_a_k_e can't fig-
  977.                  ure out any other way to create. Only the  shell
  978.                  script is used. The ..IIMMPPSSRRCC variable of a target
  979.                  that inherits ..DDEEFFAAUULLTT ''ss commands is set to the
  980.                  target's own name.
  981.  
  982.      .END        This serves a function similar to  ..BBEEGGIINN:  com-
  983.                  mands  attached  to  it are executed once every-
  984.                  thing has been re-created (so long as no  errors
  985.                  occurred).  It also serves the extra function of
  986.  
  987.  
  988.  
  989. Sprite v.1.0             4 February 1991                       15
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996. PMAKE                     User Commands                     PMAKE
  997.  
  998.  
  999.  
  1000.                  being a place on which PMake can  hang  commands
  1001.                  you put off to the end. Thus the script for this
  1002.                  target will be executed before any of  the  com-
  1003.                  mands you save with the ``...''.
  1004.  
  1005.      .EXPORT     The sources for this target are  passed  to  the
  1006.                  exportation  system  compiled  into _P_M_a_k_e.  Some
  1007.                  systems will  use  these  sources  to  configure
  1008.                  themselves.  You should ask your system adminis-
  1009.                  trator about this.
  1010.  
  1011.      .IGNORE     This target marks each of its sources  with  the
  1012.                  ..IIGGNNOORREE  attribute.  If  you  don't  give it any
  1013.                  sources, then it is like giving the --ii flag.
  1014.  
  1015.      .INCLUDES   The sources for this target are taken to be suf-
  1016.                  fixes  that indicate a file that can be included
  1017.                  in a program source file.  The suffix must  have
  1018.                  already   been   declared  with  ..SSUUFFFFIIXXEESS  (see
  1019.                  below).  Any suffix  so  marked  will  have  the
  1020.                  directories  on  its  search  path  (see ..PPAATTHH ,,
  1021.                  below) placed in the  ..IINNCCLLUUDDEESS  variable,  each
  1022.                  preceded  by a --II flag. The ..hh suffix is already
  1023.                  marked in this way in the system makefile.
  1024.  
  1025.      .INTERRUPT  When PMake is interrupted, it will  execute  the
  1026.                  commands  in  the  script for this target, if it
  1027.                  exists.
  1028.  
  1029.      .LIBS       This does for libraries what ..IINNCCLLUUDDEESS does  for
  1030.                  include  files,  except  the flag used is --LL, as
  1031.                  required by those linkers that allow you to tell
  1032.                  them  where to find libraries. The variable used
  1033.                  is ..LLIIBBSS.
  1034.  
  1035.      .MAIN       If you didn't give  a  target  (or  targets)  to
  1036.                  create  when you invoked PMake, it will take the
  1037.                  sources of this target as the targets to create.
  1038.  
  1039.      .MAKEFLAGS  This target provides a way  for  you  to  always
  1040.                  specify  flags  for  PMake  when the makefile is
  1041.                  used. The flags are just as they would be  typed
  1042.                  to the shell, though the --ff and --rr flags have no
  1043.                  effect.
  1044.  
  1045.      .NULL       This allows you to  specify  what  suffix  _P_M_a_k_e
  1046.                  should pretend a file has if, in fact, it has no
  1047.                  known suffix. Only one suffix may be  so  desig-
  1048.                  nated. The last source on the dependency line is
  1049.                  the suffix that is used  (you  should,  however,
  1050.                  only give one suffix...).
  1051.  
  1052.  
  1053.  
  1054.  
  1055. Sprite v.1.0             4 February 1991                       16
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062. PMAKE                     User Commands                     PMAKE
  1063.  
  1064.  
  1065.  
  1066.      .PATH       If you give sources for this target, PMake  will
  1067.                  take  them as directories to search for files it
  1068.                  cannot find in the  current  directory.  If  you
  1069.                  give  no  sources,  it will clear out any direc-
  1070.                  tories added to the search path before.
  1071.  
  1072.      .PATH_s_u_f_f_i_x This does a similar thing to ..PPAATTHH, but it  does
  1073.                  it  only  for  files  with the given suffix. The
  1074.                  suffix must have been defined already.
  1075.  
  1076.      .PRECIOUS   Gives the ..PPRREECCIIOOUUSS attribute to each source  on
  1077.                  the   dependency   line,  unless  there  are  no
  1078.                  sources, in which case the  ..PPRREECCIIOOUUSS  attribute
  1079.                  is given to every target in the file.
  1080.  
  1081.      .RECURSIVE  Applies the ..MMAAKKEE attribute to all its  sources.
  1082.                  It  does  nothing  if  you  don't  give  it  any
  1083.                  sources.
  1084.  
  1085.      .SHELL      Tells _P_M_a_k_e to use some  other  shell  than  the
  1086.                  Bourne  Shell.   The  sources for the target are
  1087.                  organized as _k_e_y_w_o_r_d==_v_a_l_u_e strings. If  a  _v_a_l_u_e
  1088.                  contains  whitespace,  it  may  be surrounded by
  1089.                  double-quotes to make it a single word. The pos-
  1090.                  sible sources are:
  1091.  
  1092.                  ppaatthh==_p_a_t_h
  1093.                       Tells where the shell actually resides.  If
  1094.                       you  specify  this  and nothing else, PMake
  1095.                       will use the last component of the path  to
  1096.                       find  the  specification.  Use  this if you
  1097.                       just want to use a different version of the
  1098.                       Bourne  or  C Shell (PMake knows how to use
  1099.                       the C Shell too).
  1100.  
  1101.                  nnaammee==_n_a_m_e
  1102.                       This is the name by which the shell  is  to
  1103.                       be  known.  It  is a single word and, if no
  1104.                       other keywords are  specified  (other  than
  1105.                       ppaatthh),  it  is  the  name  by  which  PMake
  1106.                       attempts to find a  specification  for  the
  1107.                       it.  You  can  use  this  if you would just
  1108.                       rather use the  C  Shell  than  the  Bourne
  1109.                       Shell (``..SSHHEELLLL:: nnaammee==ccsshh'' will do it).
  1110.  
  1111.                  qquuiieett==_e_c_h_o-_o_f_f _c_o_m_m_a_n_d
  1112.                       The command _P_M_a_k_e should send to  stop  the
  1113.                       shell  from  printing  its  commands.  Once
  1114.                       echoing is off, it is  expected  to  remain
  1115.                       off until explicitly turned on.
  1116.  
  1117.                  eecchhoo==_e_c_h_o-_o_n _c_o_m_m_a_n_d
  1118.  
  1119.  
  1120.  
  1121. Sprite v.1.0             4 February 1991                       17
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128. PMAKE                     User Commands                     PMAKE
  1129.  
  1130.  
  1131.  
  1132.                       The command PMake should give to turn echo-
  1133.                       ing back on again.
  1134.  
  1135.                  ffiilltteerr==_p_r_i_n_t_e_d _e_c_h_o-_o_f_f _c_o_m_m_a_n_d
  1136.                       Many shells will echo the echo-off  command
  1137.                       when  it is given. This keyword tells PMake
  1138.                       in what format the  shell  actually  prints
  1139.                       the  echo-off  command. Wherever PMake sees
  1140.                       this string in the shell's output, it  will
  1141.                       delete  it and any following whitespace, up
  1142.                       to and including the next newline.
  1143.  
  1144.                  eecchhooFFllaagg==_f_l_a_g _t_o _t_u_r_n _e_c_h_o_i_n_g _o_n
  1145.                       The flag to pass to the shell to turn echo-
  1146.                       ing on at the start.  If either this or the
  1147.                       next flag begins with a `-', the flags will
  1148.                       be  passed  to  the shell as separate argu-
  1149.                       ments. Otherwise,  the  two  will  be  con-
  1150.                       catenated.
  1151.  
  1152.                  eerrrrFFllaagg==_f_l_a_g _t_o _t_u_r_n _e_r_r_o_r _c_h_e_c_k_i_n_g _o_n
  1153.                       Flag to give the shell to turn error check-
  1154.                       ing on at the start.
  1155.  
  1156.                  cchheecckk==_c_o_m_m_a_n_d _t_o _t_u_r_n _e_r_r_o_r _c_h_e_c_k_i_n_g _o_n
  1157.                       The command to make  the  shell  check  for
  1158.                       errors or to print the command that's about
  1159.                       to be executed (%s indicates where the com-
  1160.                       mand  to  print should go), if hasErrCtl is
  1161.                       "no".
  1162.  
  1163.                  iiggnnoorree==_c_o_m_m_a_n_d _t_o _t_u_r_n _e_r_r_o_r _c_h_e_c_k_i_n_g _o_f_f
  1164.                       The command to turn error checking  off  or
  1165.                       the  command  to execute a command ignoring
  1166.                       any errors. "%s" takes  the  place  of  the
  1167.                       command.
  1168.  
  1169.                  hhaassEErrrrCCttll==_y_e_s _o_r _n_o
  1170.                       This takes a value that is  either  yyeess  or
  1171.                       nnoo,  telling  how  the "check" and "ignore"
  1172.                       commands should be used.  NOTE: If this  is
  1173.                       "no",  both  the  check and ignore commands
  1174.                       should contain a \n at  their  end  if  the
  1175.                       shell requires a newline before executing a
  1176.                       command.
  1177.  
  1178.                  The strings that follow these  keywords  may  be
  1179.                  enclosed  in single or double quotes (the quotes
  1180.                  will be stripped off) and may contain the  usual
  1181.                  C backslash-characters.
  1182.  
  1183.      .SILENT     Applies the ..SSIILLEENNTT attribute  to  each  of  its
  1184.  
  1185.  
  1186.  
  1187. Sprite v.1.0             4 February 1991                       18
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. PMAKE                     User Commands                     PMAKE
  1195.  
  1196.  
  1197.  
  1198.                  sources.  If  there are no sources on the depen-
  1199.                  dency line, then it is as if you gave PMake  the
  1200.                  --ss flag.
  1201.  
  1202.      .SUFFIXES   This is used to give new file suffixes for PMake
  1203.                  to  handle. Each source is a suffix PMake should
  1204.                  recognize. If you give  a  ..SSUUFFFFIIXXEESS  dependency
  1205.                  line  with  no  sources, PMake will forget about
  1206.                  all the suffixes it knew (this  also  nukes  the
  1207.                  null  suffix).   For  those targets that need to
  1208.                  have suffixes defined, this is how you do it.
  1209.  
  1210.      In addition to these targets, a line of the form
  1211.         _a_t_t_r_i_b_u_t_e : _s_o_u_r_c_e_s
  1212.      applies the _a_t_t_r_i_b_u_t_e to all the targets listed  as  _s_o_u_r_c_e_s
  1213.      except as noted above.
  1214.  
  1215. TTHHEE PPOOWWEERR OOFF SSUUFFFFIIXXEESS
  1216.      One of the best aspects of both _M_a_k_e and  _P_M_a_k_e  comes  from
  1217.      their  understanding of how the suffix of a file pertains to
  1218.      its contents and their ability to  do  things  with  a  file
  1219.      based  solely  on its suffix.  _P_M_a_k_e also has the ability to
  1220.      find a file based on its suffix, supporting different  types
  1221.      of files being in different directories.  The former ability
  1222.      derives from the existence of so-called transformation rules
  1223.      while  the  latter  comes  from  the specification of search
  1224.      paths using the ..PPAATTHH target.
  1225.  
  1226.      TTRRAANNSSFFOORRMMAATTIIOONN RRUULLEESS
  1227.  
  1228.      A special type of dependency, called a transformation  rule,
  1229.      consists  of  a  target  made  of  two  known suffixes stuck
  1230.      together followed by a shell script to transform a  file  of
  1231.      one  suffix  into  a file of the other.  The first suffix is
  1232.      the suffix of the source file and the second is that of  the
  1233.      target  file.   E.g.  the  target ``.c.o,'' followed by com-
  1234.      mands, would define a transformation  from  files  with  the
  1235.      ``.c''  suffix to those with the ``.o'' suffix.  A transfor-
  1236.      mation rule has no source files associated with  it,  though
  1237.      attributes  may  be  given  to  one  in the usual way. These
  1238.      attributes are then applied to any target  that  is  on  the
  1239.      ``target  end'' of a transformation rule.  The suffixes that
  1240.      are concatenated must be already known to _P_M_a_k_e in order for
  1241.      their  concatenation  to  be recognized as a transformation,
  1242.      i.e. the suffixes must have been the source for a  .SUFFIXES
  1243.      target  at  some  time before the transformation is defined.
  1244.      Many transformations are defined in the system makefile (qv.
  1245.      FFIILLEESS) and I refer you there for more examples as well as to
  1246.      find what is already available (you should  especially  note
  1247.      the  various  variables  used  to contain flags for the com-
  1248.      pilers, assemblers, etc., used to transform the files. These
  1249.      variables allow you to customize the transformations to your
  1250.  
  1251.  
  1252.  
  1253. Sprite v.1.0             4 February 1991                       19
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260. PMAKE                     User Commands                     PMAKE
  1261.  
  1262.  
  1263.  
  1264.      own needs without having to redefine them).   A  transforma-
  1265.      tion  rule  may be defined more than once, but only the last
  1266.      such definition is remembered by _P_M_a_k_e.  This allows you  to
  1267.      redefine  the  transformations in the system makefile if you
  1268.      wish.
  1269.  
  1270.      Transformation rules are used only when a target has no com-
  1271.      mands  associated with it, both to find any additional files
  1272.      on which it depends and to attempt to figure out just how to
  1273.      make  the target should it end up being out-of-date.  When a
  1274.      transformation is found for a target, another of  the  seven
  1275.      ``local'' variables mentioned earlier is defined:
  1276.  
  1277.           .IMPSRC (<)
  1278.                The name/path of the source from which the  target
  1279.                is to be transformed (the ``implied'' source).
  1280.  
  1281.      For example, given the following makefile:
  1282.         a.out : a.o b.o
  1283.              $(CC) $(.ALLSRC)
  1284.      and a directory containing the files a.o, a.c and b.c, _P_M_a_k_e
  1285.      will  look at the list of suffixes and transformations given
  1286.      in the built-in rules and find that the suffixes ``.c''  and
  1287.      ``.o''  are  both  known  and there is a transformation rule
  1288.      defined from one to  the  other  with  the  command  ``$(CC)
  1289.      $(CFLAGS)  -c  $(.IMPSRC).''  Having found this, it can then
  1290.      check the modification times of both a.c and b.c and execute
  1291.      the  command  from  the  transformation rule as necessary in
  1292.      order to update the files a.o and b.o.
  1293.  
  1294.      _P_M_a_k_e, unlike _M_a_k_e before  it,  has  the  ability  to  apply
  1295.      several  transformations  to a file even if the intermediate
  1296.      files do not exist.  Given a directory containing a .o  file
  1297.      and  a  .q file, and transformations from .q to .l, .l to .c
  1298.      and .c to .o, _P_M_a_k_e will define a transformation from .q  ->
  1299.      .o using the three transformation rules you defined.  In the
  1300.      event of two paths between the same suffixes,  the  shortest
  1301.      path  will be chosen between the target and the first exist-
  1302.      ing file on the path.  So if there were also  a  transforma-
  1303.      tion  from .l files to .o files, _P_M_a_k_e would use the path .q
  1304.      -> .l -> .o instead of .q -> .l -> .c -> .o.
  1305.  
  1306.      Once an existing file is found, _P_M_a_k_e will continue to  look
  1307.      at  and  record  transformations until it comes to a file to
  1308.      which nothing it knows of can be transformed, at which point
  1309.      it will stop looking and use the path it has already found.
  1310.  
  1311.      What happens if you have a .o file, a .q file and a .r file,
  1312.      all  with the same prefix, and transformations from .q -> .o
  1313.      and .r -> .o?  Which transformation  will  be  used?   _P_M_a_k_e
  1314.      uses the order in which the suffixes were given on the ..SSUUFF--
  1315.      FFIIXXEESS line  to  decide  between  transformations:  whichever
  1316.  
  1317.  
  1318.  
  1319. Sprite v.1.0             4 February 1991                       20
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326. PMAKE                     User Commands                     PMAKE
  1327.  
  1328.  
  1329.  
  1330.      suffix  came  first,  wins.   So  if the three suffixes were
  1331.      declared
  1332.         .SUFFIXES : .o .q .r
  1333.      the .q -> .o transformation would be applied. Similarly,  if
  1334.      they were declared as
  1335.         .SUFFIXES : .o .r .q
  1336.      the .r -> .o transformation would be used.  You should  keep
  1337.      this  in  mind  when  writing  such  rules.   Note also that
  1338.      because the placing of a suffix on a ..SSUUFFFFIIXXEESS line  doesn't
  1339.      alter  the precedence of previously-defined transformations,
  1340.      it is sometimes necessary to clear the whole lot of them out
  1341.      and  start  from  scratch.  This  is what the ..SSUUFFFFIIXXEESS-only
  1342.      line, mentioned earlier, will do.
  1343.  
  1344. SSEEAARRCCHH PPAATTHHSS
  1345.      _P_M_a_k_e also supports the notion of multiple directories in  a
  1346.      more flexible, easily-used manner than has been available in
  1347.      the past.  You can define a list of directories in which  to
  1348.      search  for  any  and  all  files that aren't in the current
  1349.      directory by giving the directories as sources to the  ..PPAATTHH
  1350.      target.  The  search  will only be conducted for those files
  1351.      used only as sources, on the assumption that files  used  as
  1352.      targets will be created in the current directory.
  1353.  
  1354.      The line
  1355.         .PATH : RCS
  1356.      would tell _P_M_a_k_e  to  look  for  any  files  it  is  seeking
  1357.      (including ones made up by means of transformation rules) in
  1358.      the RCS directory as well as the current one. Note, however,
  1359.      that this searching is only done if the file is used only as
  1360.      a source in the makefile. I.e. if the file cannot be created
  1361.      by commands in the makefile.
  1362.  
  1363.      A search path specific to files with a given suffix can also
  1364.      be specified in much the same way.
  1365.         .PATH.h : h /sprite/lib/include
  1366.      causes the search for header files to be conducted in the  h
  1367.      and  /sprite/lib/include  directory  as  well as the current
  1368.      one.
  1369.  
  1370.      When expanding wildcards, these paths are also used. If  the
  1371.      pattern  has a recognizable suffix, the search path for that
  1372.      suffix is used.  Otherwise, the path defined with the  regu-
  1373.      lar ..PPAATTHH target is used.
  1374.  
  1375.      When a file is found somewhere other than the current direc-
  1376.      tory,  its  name  is  replaced  by  its full pathname in any
  1377.      ``local'' variables.
  1378.  
  1379.      Two types of suffixes are given  special  attention  when  a
  1380.      search path is defined for them. On most systems, the C com-
  1381.      piler lets you specify where to find header files (.h files)
  1382.  
  1383.  
  1384.  
  1385. Sprite v.1.0             4 February 1991                       21
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392. PMAKE                     User Commands                     PMAKE
  1393.  
  1394.  
  1395.  
  1396.      by  means  of --II flags similar to those used by _P_M_a_k_e.  If a
  1397.      search path is given for any suffix used as a source for the
  1398.      ..IINNCCLLUUDDEESS  target,  the variable $$((..IINNCCLLUUDDEESS)) will be set to
  1399.      contain all the directories on the path, in the order given,
  1400.      in  a format which can be passed directly to the C compiler.
  1401.      Similarly, on some systems,  one  may  give  directories  to
  1402.      search  for  libraries to the compiler by means of --LL flags.
  1403.      Directories on the search path for a suffix  which  was  the
  1404.      source  of  the  ..LLIIBBSS target will be placed in the $$((..LLIIBBSS))
  1405.      variable ready to be passed to the compiler.
  1406.  
  1407. LLIIBBRRAARRIIEESS AANNDD AARRCCHHIIVVEESS
  1408.      Two other special forms of sources are recognized by  _P_M_a_k_e.
  1409.      Any source that begins with the characters ``-l'' or ends in
  1410.      a suffix that is a source for the ..LLIIBBSS target is assumed to
  1411.      be   a   library,  and  any  source  that  contains  a  left
  1412.      parenthesis in it is considered to be a member (or  members)
  1413.      of an archive.
  1414.  
  1415.      Libraries are treated specially mostly in how they appear in
  1416.      the local variables of those targets that depend on them. If
  1417.      the system supports the --LL flag when linking,  the  name  of
  1418.      the  library  (i.e.  its  ``-l''  form) is used in all local
  1419.      variables.  _P_M_a_k_e assumes that you  will  use  the  $(.LIBS)
  1420.      variable  in the appropriate place.  If, however, the system
  1421.      does not have this feature, the name is expanded to its full
  1422.      pathname before it is placed in any local variable.
  1423.  
  1424.      One problem with libraries is they have a table of  contents
  1425.      in  them and when the file is touched (so the file's modifi-
  1426.      cation time and the time listed in  the  table  of  contents
  1427.      don't  match), the library is declared to be ``out-of-date''
  1428.      by the linker and the final linking stage of  creating  your
  1429.      program fails miserably. To avoid this problem, when you use
  1430.      the --tt flag, _P_M_a_k_e updates the time of the table of contents
  1431.      for the library, as well as the library itself.
  1432.  
  1433.      The process of creating a library or archive can be a  pain-
  1434.      ful one, what with all the members having to be kept outside
  1435.      the archive as well as inside it in order to keep them  from
  1436.      being  recreated.   _P_M_a_k_e has been set up, however, to allow
  1437.      you to reference files that are in an  archive  in  a  rela-
  1438.      tively  painless  manner.   The  specification of an archive
  1439.      member is written as:
  1440.         _a_r_c_h_i_v_e(_m_e_m_b_e_r [_m_e_m_b_e_r...])
  1441.      Both the open and close parenthesis are required  and  there
  1442.      may  be  any  number of members between them (except 0, that
  1443.      is). Members may also include  wildcards  characters.   When
  1444.      such  a  source  is examined, it is the modification time of
  1445.      the member, as recorded in the  archive,  that  is  used  to
  1446.      determine its datedness.
  1447.  
  1448.  
  1449.  
  1450.  
  1451. Sprite v.1.0             4 February 1991                       22
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458. PMAKE                     User Commands                     PMAKE
  1459.  
  1460.  
  1461.  
  1462.      If an archive member has no  commands  associated  with  it,
  1463.      _P_M_a_k_e  goes  through  a special process to find commands for
  1464.      it.  First, implicit sources are sought using the ``member''
  1465.      portion  of the specification. So if you have something like
  1466.      ``libcompat.a(procFork.o)'' for a target, _P_M_a_k_e attempts  to
  1467.      find sources for the file ``procFork.o,'' even if it doesn't
  1468.      exist. If  such  sources  exist,  _P_M_a_k_e  then  looks  for  a
  1469.      transformation   rule   from  the  member's  suffix  to  the
  1470.      archive's (in this case from .o -> .a) and tacks those  com-
  1471.      mands on as well.
  1472.  
  1473.      To make these transformations easier to write,  three  local
  1474.      variables are defined for the target:
  1475.  
  1476.      .ARCHIVE (%)
  1477.           The path to the archive file.
  1478.  
  1479.      .MEMBER (!)
  1480.           The  actual  member  name  (literally   the   part   in
  1481.           parentheses).
  1482.  
  1483.      @u-3p .TARGET (@)
  1484.           The path to the file which will be archived, if  it  is
  1485.           only  a  source, or the same as the ..MMEEMMBBEERR variable if
  1486.           it is also a target.
  1487.  
  1488.      Using the transformations already in the system makefile,  a
  1489.      makefile for a library might look something like this:
  1490.         OBJS = procFork.o procExec.o procEnviron.o fsRead.o
  1491.         .o.a :
  1492.              ...
  1493.              rm -f $(.MEMBER)
  1494.  
  1495.         lib.a : lib.a($(OBJS))
  1496.              ar cru $(.TARGET) $(.OODATE)
  1497.              ranlib $(.TARGET)
  1498.  
  1499.      You might be wondering, at this point, why I did not  define
  1500.      the .o -> .a transformation like this:
  1501.         .o.a :
  1502.              ar r $(.ARCHIVE) $(.TARGET)
  1503.              ...
  1504.              rm -f $(.TARGET)
  1505.      The reason is simple: you cannot execute ``ar'' on the  same
  1506.      file  several  times  at once. If you try, you end up with a
  1507.      corrupted archive.  So rather than reduce _P_M_a_k_e to executing
  1508.      only  one  job at a time, I chose to archive all the out-of-
  1509.      date files at once (this turns out to be faster anyway).
  1510.  
  1511. OOUUTTPPUUTT
  1512.      When creating targets in parallel, several shells  are  exe-
  1513.      cuting  at  once,  each  wanting to write its own two cent's
  1514.  
  1515.  
  1516.  
  1517. Sprite v.1.0             4 February 1991                       23
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524. PMAKE                     User Commands                     PMAKE
  1525.  
  1526.  
  1527.  
  1528.      worth onto the screen.  This  output  must  be  captured  by
  1529.      _P_M_a_k_e  in some way in order to prevent the screen from being
  1530.      filled with garbage even more indecipherable  than  one  can
  1531.      already  get  from  these  programs.   _P_M_a_k_e has two ways of
  1532.      doing this, one of which provides for  much  cleaner  output
  1533.      and  a  clear  delineation  between  the output of different
  1534.      jobs, the other of which provides a more immediate  response
  1535.      so  one  can  tell  what is really happening.  The former is
  1536.      done by notifying the user when the creation of a given tar-
  1537.      get starts, capturing the output, and transferring it to the
  1538.      screen when the job finishes, preceded by an  indication  as
  1539.      to  which  job  produced  the output.  The latter is done by
  1540.      catching the output of the  shell  (and  its  children)  and
  1541.      buffering it until an entire line is received, then printing
  1542.      that line preceded by the name of the  job  from  which  the
  1543.      line  came.  The name of the job is just the target which is
  1544.      being created by it.  Since I prefer this second method,  it
  1545.      is  the  one used by default.  The first method will be used
  1546.      if the --PP flag is given to _P_M_a_k_e.
  1547.  
  1548. PPAARRAALLLLEELLIISSMM
  1549.      As mentioned before, _P_M_a_k_e attempts to create  several  tar-
  1550.      gets  at once.  On some systems where load balancing or pro-
  1551.      cess migration is in effect, the amount of concurrency which
  1552.      can  be used will be much greater than on others. During the
  1553.      development of _P_M_a_k_e, I found that while one could create up
  1554.      to  five  targets  at  once  on  a  Sun 3 without making the
  1555.      machine unusable, attempting the same feat on a Sun 2  would
  1556.      grind  the  machine  into  the  dirt, most likely making the
  1557.      whole process run slower than it would have under _M_a_k_e.   In
  1558.      addition,  the use of _P_M_a_k_e on a multi-user machine (in con-
  1559.      trast to a workstation) calls  for  judicious  use  of  con-
  1560.      currency  to  avoid annoying the other users. The ability to
  1561.      execute tasks in parallel, in combination with the execution
  1562.      of  only  one  shell  per  target, brings about decreases in
  1563.      creation time on the order of 25%-60%.
  1564.  
  1565.      The --JJ and --LL flags are used to control the number of shells
  1566.      executing  at once and should be used to find the best level
  1567.      for your machine. Once this is found, the default level  can
  1568.      be set at that point and _P_M_a_k_e recompiled.
  1569.  
  1570. BBAACCKKWWAARRDD--CCOOMMPPAATTIIBBIILLIITTYY
  1571.      _P_M_a_k_e was designed to be as backwards-compatible  with  _M_a_k_e
  1572.      as  possible.   In  spite  of this, however, there are a few
  1573.      major differences which may cause problems  when  using  old
  1574.      makefiles:
  1575.  
  1576.      1)   The variable substitution,  as  mentioned  earlier,  is
  1577.           very  different  and  will  cause  problems  unless the
  1578.           makefile is converted or the --VV flag is given.
  1579.  
  1580.  
  1581.  
  1582.  
  1583. Sprite v.1.0             4 February 1991                       24
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590. PMAKE                     User Commands                     PMAKE
  1591.  
  1592.  
  1593.  
  1594.      2)   Because  targets  are  created  in  parallel,   certain
  1595.           sequences which depend on the sources of a target being
  1596.           created sequentially will fail miserably. E.g.:
  1597.              prod : $(PROGRAM) clean
  1598.           This is liable to cause some of the object files to  be
  1599.           removed  after  having  been created during the current
  1600.           invocation (or, at the very  least,  the  object  files
  1601.           will  not  be  removed when the program has been made),
  1602.           leading to errors in  the  final  linking  stage.  This
  1603.           problem  cannot  even  be gotten around by limiting the
  1604.           maximum concurrency to one, since the traversal of  the
  1605.           dependency  graph  is  done  in a breadth-first, rather
  1606.           than a depth-first way. This can only be gotten  around
  1607.           by  rewriting  the  makefile, or by invoking _P_M_a_k_e with
  1608.           the --MM flag.
  1609.  
  1610.      One other possible conflict arises because _P_M_a_k_e forks  only
  1611.      one  shell  to  execute  the commands to re-create a target.
  1612.      This means that changes  of  directory,  environment,  etc.,
  1613.      remain  in  effect  throughout the creation process. It also
  1614.      allows for a more natural entry of shell constructs, such as
  1615.      the ``for'' and ``while'' loops in the Bourne shell, without
  1616.      the need for backslashes and  semi-colons  required  by  the
  1617.      one-shell-per-command paradigm used by _M_a_k_e.  This shouldn't
  1618.      pose any serious difficulties (or even any trivial  ones  so
  1619.      far  as  I can see), but should, in fact, make life a little
  1620.      easier. It is, however, possible to have _P_M_a_k_e execute  each
  1621.      command in a single shell by giving it the --BB flag.
  1622.  
  1623. FFIILLEESS
  1624.      Makefile or makefile      default input file
  1625.      /sprite/lib/pmake/sys.mk  System  makefile   (the   built-in
  1626.      rules)
  1627.  
  1628. EENNVVIIRROONNMMEENNTT
  1629.      PPMMAAKKEE    Flags PMake should always use when invoked.
  1630.  
  1631. SSEEEE AALLSSOO
  1632.      _m_a_k_e(1) for a more complete explanation  of  the  lower-case
  1633.      flags to _P_M_a_k_e.
  1634.  
  1635. KKEEYYWWOORRDDSS
  1636.      make, transformation
  1637.  
  1638. AAUUTTHHOORR
  1639.      Adam de Boor
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649. Sprite v.1.0             4 February 1991                       25
  1650.  
  1651.  
  1652.  
  1653.